#include "myexample.h"
#include "lvgl/lvgl.h"

// // 1、获取屏幕对象(父对象)
// lv_obj_t *screen = lv_scr_act();
// // 2、创建一个子对象
// lv_obj_t *obj1 = lv_obj_create(screen);
// lv_obj_set_size(obj1, 800/3, 480/3);  // 子对象大小

// // 左上控件
// lv_obj_set_style_bg_color(obj1, lv_color_hex(0x00ff00), 0); // 子对象背景颜色
// lv_obj_align(obj1, LV_ALIGN_TOP_LEFT, 0, 0);  // 子对象对齐方式

void obj_pos(void)
{
    // 1、获取屏幕对象(父对象)
    lv_obj_t *screen = lv_scr_act();
    lv_obj_t *obj[9];
    lv_color_t color[] = {
        lv_palette_main(LV_PALETTE_GREEN),
        lv_palette_main(LV_PALETTE_RED),
        lv_palette_main(LV_PALETTE_BLUE),
        lv_palette_main(LV_PALETTE_PURPLE),
        lv_palette_main(LV_PALETTE_YELLOW),
        lv_palette_main(LV_PALETTE_ORANGE),
        lv_palette_main(LV_PALETTE_TEAL),
        lv_palette_main(LV_PALETTE_PINK),
        lv_palette_main(LV_PALETTE_BROWN)};

    // 2、创建一个子对象
    for (int i = 0; i < 9; i++)
    {
        obj[i] = lv_obj_create(screen);
        lv_obj_set_style_bg_color(obj[i], color[i], 0);
        lv_obj_set_size(obj[i], 800 / 3, 480 / 3);
        lv_obj_set_x(obj[i], i % 3 * 800 / 3);
        lv_obj_set_y(obj[i], i / 3 * 480 / 3);
    }
}

void obj_xx(void)
{
    lv_obj_t *screen = lv_scr_act();
    lv_obj_t *obj = lv_obj_create(screen);
    lv_obj_set_size(obj, 800, 480);
    lv_obj_set_style_bg_color(obj, lv_color_hex(0xff0000), 0);
}

void obj_style(void)
{

// 初始化样式
static lv_style_t style;
lv_style_init(&style);

// 设置样式
// 设置圆角、透明度、背景色、阴影等样式属性
lv_style_set_radius(&style, 5); // 圆角
lv_style_set_bg_opa(&style, LV_OPA_COVER); // 背景透明度
lv_style_set_bg_color(&style, lv_palette_lighten(LV_PALETTE_GREEN, 1)); // 背景颜色
lv_style_set_shadow_width(&style, 55); // 阴影宽度
lv_style_set_shadow_color(&style, lv_palette_main(LV_PALETTE_BLUE)); // 阴影颜色



// 将样式添加到obj
lv_obj_t * obj = lv_obj_create(lv_scr_act());
lv_obj_align(obj, LV_ALIGN_CENTER, 0, 0); // 居中对齐
lv_obj_add_style(obj, &style, 0);
 
}

void obj_style1(void)
{
    // 数组props，用于指定背景色、边框色和边框宽度三个属性将在过渡期间被修改
    static const lv_style_prop_t props[] = {
        LV_STYLE_BG_COLOR,
        LV_STYLE_BORDER_COLOR,
        LV_STYLE_BORDER_WIDTH, 0};
    
    // 200 渐变持续的时间
    // 100 渐变开始的延时时间
    static lv_style_transition_dsc_t trans_def; // 初始状态
    lv_style_transition_dsc_init(&trans_def, props, lv_anim_path_linear, 200, 100, NULL);

    // 500 渐变持续的时间
    // 0   渐变开始的延时时间
    static lv_style_transition_dsc_t trans_pr; // 按下时的状态
    lv_style_transition_dsc_init(&trans_pr, props, lv_anim_path_linear, 500, 0, NULL);


    // 初始化样式
    // 过渡持续时间（100毫秒），即过渡动画完成所需的时间
    // 延迟时间（200毫秒），表示在状态改变后，过渡动画开始前需要等待的时间
    static lv_style_t style_def; // 默认样式
    static lv_style_t style_pr; // 按下时的样式
    
    lv_style_init(&style_def); 
    lv_style_init(&style_pr);

    lv_style_set_bg_color(&style_pr, lv_color_hex(0x00ff00)); // 按下时的背景颜色
    lv_style_set_border_width(&style_pr, 6); // 按下时的边框宽度
    lv_style_set_border_color(&style_pr, lv_color_hex(0xff0000)); // 按下时的边框颜色
    
    //将渐变描述策略应用于样式
    lv_style_set_transition(&style_def, &trans_def); // 默认样式过渡到按下时的样式
    lv_style_set_transition(&style_pr, &trans_pr); // 按下时的样式过渡到默认样式

    // lv_style_transition_dsc_init(&style_def, props, lv_anim_path_linear, 100, 200, NULL);
    // lv_style_transition_dsc_init(&style_pr, props, lv_anim_path_linear, 500, 0, NULL);

    lv_obj_t *obj = lv_obj_create(lv_scr_act());
    lv_obj_add_style(obj, &style_def, LV_STATE_DEFAULT); // 默认样式
    lv_obj_add_style(obj, &style_pr, LV_STATE_PRESSED); // 按下时的样式
    lv_obj_center(obj); // 居中对齐
    // lv_obj_align(obj, LV_ALIGN_CENTER, 0, 0);

}


// 滑动条
#if LV_USE_SLIDER && LV_BUILD_EXAMPLES // 

// static void slider_event_cb(lv_event_t * e);
static lv_obj_t * slider_label;

/**
 * 滑动条值变化事件回调函数
 * 功能：当滑动条值改变时，更新标签文本显示当前百分比值
 * @param e 事件对象，包含触发事件的目标组件和事件类型等信息
 */
static void slider_event_cb(lv_event_t * e)
{
    // 获取事件触发源（滑动条对象）
    lv_obj_t * slider = lv_event_get_target(e);
    char buf[8];    // 定义缓冲区存储格式化后的百分比文本
    lv_snprintf(buf, sizeof(buf), "%d%%", (int)lv_slider_get_value(slider)); // 将滑动条当前值格式化为百分比字符串（如"50%"）
    lv_label_set_text(slider_label, buf); // 更新，设置标签文本为格式化后的百分比字符串（如"50%"）
    lv_obj_align_to(slider_label, slider, LV_ALIGN_OUT_BOTTOM_MID, 0, 10); // 标签文本与滑动条底部居中对齐，偏移量为0，垂直偏移量为10像素
}

/**
 * 滑动条组件示例创建函数
 * 功能：创建一个居中显示的滑动条和其下方的数值标签，并关联事件处理
 */
void lv_example_slider_1(void)
{
    /* 创建滑动条对象并设置属性 */

    // 在当前活动屏幕(lv_scr_act())上创建滑动条
    lv_obj_t * slider = lv_slider_create(lv_scr_act());
    lv_obj_center(slider); // 将滑动条居中显示
    lv_obj_add_event_cb(slider, slider_event_cb, LV_EVENT_VALUE_CHANGED, NULL); // 为滑动条添加事件回调，当值改变时触发时调用函数slider_event_cb

    /* 创建数值标签对象并设置初始属性 */

    // 在当前活动屏幕上创建标签对象，用于显示百分比数值
    slider_label = lv_label_create(lv_scr_act());
    lv_label_set_text(slider_label, "0%"); // 设置标签初始文本为"0%"
    // 初始定位：将标签对齐到滑动条底部中间，垂直偏移10像素
    lv_obj_align_to(slider_label, slider, LV_ALIGN_OUT_BOTTOM_MID, 0, 10);
}



#endif
